home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / src / linux-headers-2.6.28-15 / include / asm-generic / bitops / fls64.h < prev    next >
Encoding:
C/C++ Source or Header  |  2008-12-24  |  803 b   |  37 lines

  1. #ifndef _ASM_GENERIC_BITOPS_FLS64_H_
  2. #define _ASM_GENERIC_BITOPS_FLS64_H_
  3.  
  4. #include <asm/types.h>
  5.  
  6. /**
  7.  * fls64 - find last set bit in a 64-bit word
  8.  * @x: the word to search
  9.  *
  10.  * This is defined in a similar way as the libc and compiler builtin
  11.  * ffsll, but returns the position of the most significant set bit.
  12.  *
  13.  * fls64(value) returns 0 if value is 0 or the position of the last
  14.  * set bit if value is nonzero. The last (most significant) bit is
  15.  * at position 64.
  16.  */
  17. #if BITS_PER_LONG == 32
  18. static inline int fls64(__u64 x)
  19. {
  20.     __u32 h = x >> 32;
  21.     if (h)
  22.         return fls(h) + 32;
  23.     return fls(x);
  24. }
  25. #elif BITS_PER_LONG == 64
  26. static inline int fls64(__u64 x)
  27. {
  28.     if (x == 0)
  29.         return 0;
  30.     return __fls(x) + 1;
  31. }
  32. #else
  33. #error BITS_PER_LONG not 32 or 64
  34. #endif
  35.  
  36. #endif /* _ASM_GENERIC_BITOPS_FLS64_H_ */
  37.